import { store } from "@/store";

import UserAPI, { type UserInfo } from "@/api/user/index";

export const useUserStore = defineStore("user", () => {
  const userInfo = useStorage<any>("userInfo", {} as UserInfo);

  /**
   * 获取用户信息
   *
   * @returns {UserInfo} 用户信息
   */
  function getUserInfo() {
    return new Promise<UserInfo>((resolve, reject) => {
      UserAPI.getUserInfo()
        .then((data) => {
          if (!data) {
            reject("Verification failed, please Login again.");
            return;
          }
          Object.assign(userInfo.value, { ...data.data });
          userInfo.value = data.data;
          resolve(data.data);
        })
        .catch((error) => {
          reject(error);
        });
    });
  }

  /**
   * 清空当前缓存的用户信息
   *
   */
  function clearUserInfo() {
    userInfo.value = {}
  }

  /**
   * 获取缓存的用户信息
   *
   */
  function getStoreUserInfo() {
    return userInfo.value
  }

  return {
    userInfo,
    getUserInfo,
    clearUserInfo,
    getStoreUserInfo
  };
});

/**
 * 用于在组件外部（如在Pinia Store 中）使用 Pinia 提供的 store 实例。
 * 官方文档解释了如何在组件外部使用 Pinia Store：
 * https://pinia.vuejs.org/core-concepts/outside-component-usage.html#using-a-store-outside-of-a-component
 */
export function useUserStoreHook() {
  return useUserStore(store);
}
